Code reading techniques